/*
	Copyright (C) 2009 jungil Han <jungil.Han@gmail.com>

	This program is free software: you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation, either version 3 of the License, or
	(at your option) any later version.

	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/


#include "mkUtil.h"

#include <QDir>
#include <QString>
#include <QSettings>
#include <qt_windows.h>

QString mkUtil::GetDefaultBrowser()
{
	QString defaultBrowser;
	QSettings registry( "HKEY_CLASSES_ROOT\\http\\shell\\open\\command", QSettings::NativeFormat);
	defaultBrowser = registry.value( "Default" ).toString();

	int nIndexQuotes = defaultBrowser.indexOf( "\"", 1);

	return defaultBrowser.mid( 1, nIndexQuotes - 1 );	// Quotes 제거
}

bool mkUtil::IsEnabledAutoRun()
{
	bool bEnable = false;

	QSettings registry( "HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Run", QSettings::NativeFormat);
	QString strAutoRun = registry.value( "Monkey Hotkey" ).toString();

	if ( !strAutoRun.isEmpty() )
		bEnable = true;

	return bEnable;
}

void mkUtil::RegisterAutoRun( IN bool a_bIsEnable )
{
	QSettings registry( "HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Run", QSettings::NativeFormat);

	QString strAppPath = QDir::currentPath() + "/Monkey Hotkey.exe";

	if ( a_bIsEnable ) {
		registry.setValue( "Monkey Hotkey", QDir::toNativeSeparators( strAppPath ) +" /autorun");
	} else {
		registry.remove( "Monkey Hotkey" );
	}
}

void mkUtil::GetWriteDir( OUT QString &a_refWriteDir )
{
	if ( IsEnabledAutoRun() ) {
		QSettings registry( "HKEY_LOCAL_MACHINE\\Software\\Monkey Hotkey", QSettings::NativeFormat);
		a_refWriteDir = registry.value( "Install_Dir" ).toString();
	} else {
		a_refWriteDir = QDir::currentPath();
	}

	if ( !a_refWriteDir.isEmpty() ) {
		a_refWriteDir += "/";
		a_refWriteDir = QDir::toNativeSeparators( a_refWriteDir );
	}
}

unsigned int mkUtil::TranslateKeyQtToWin32( IN Qt::Key a_eKey )
{
    unsigned int nWin32Key = 0;

	switch( a_eKey ) {
        /* Function */
		case Qt::Key_F1:	nWin32Key = VK_F1;	break;
		case Qt::Key_F2:	nWin32Key = VK_F2;	break;
		case Qt::Key_F3:	nWin32Key = VK_F3;	break;
		case Qt::Key_F4:	nWin32Key = VK_F4;	break;
		case Qt::Key_F5:	nWin32Key = VK_F5;	break;
		case Qt::Key_F6:	nWin32Key = VK_F6;	break;
		case Qt::Key_F7:	nWin32Key = VK_F7;	break;
		case Qt::Key_F8:	nWin32Key = VK_F8;	break;
		case Qt::Key_F9:	nWin32Key = VK_F9;	break;
		case Qt::Key_F10:	nWin32Key = VK_F10;	break;
		case Qt::Key_F11:	nWin32Key = VK_F11;	break;
		case Qt::Key_F12:	nWin32Key = VK_F12;	break;

        /* MISC */
		case Qt::Key_Shift:		nWin32Key = MOD_SHIFT;		break;
		case Qt::Key_Control:	nWin32Key = MOD_CONTROL;	break;
		case Qt::Key_Alt:		nWin32Key = MOD_ALT;		break;
		case Qt::Key_Meta:		nWin32Key = MOD_WIN;		break;

		default:	nWin32Key = (unsigned int)a_eKey;    break;
     }

    return nWin32Key;
}

 void mkUtil::TranslateKeyEnumToText( IN int a_nSystemKey, IN int a_nNonSystemKey,
									    OUT QString *a_pSystemKeyText, OUT QString *a_pNonSystemKeyText)
{
	switch ( a_nSystemKey ) {
		case Qt::Key_Shift:		*a_pSystemKeyText = "Shift";	break;
		case Qt::Key_Control:	*a_pSystemKeyText = "Ctrl";		break;
		case Qt::Key_Alt:		*a_pSystemKeyText = "Alt";		break;
		case Qt::Key_Meta:		*a_pSystemKeyText = "Win";		break;
	}

	switch ( a_nNonSystemKey ) {
		case Qt::Key_F1:	*a_pNonSystemKeyText = "F1";	break;
		case Qt::Key_F2:	*a_pNonSystemKeyText = "F2";	break;
		case Qt::Key_F3:	*a_pNonSystemKeyText = "F3";	break;
		case Qt::Key_F4:	*a_pNonSystemKeyText = "F4";	break;
		case Qt::Key_F5:	*a_pNonSystemKeyText = "F5";	break;
		case Qt::Key_F6:	*a_pNonSystemKeyText = "F6";	break;
		case Qt::Key_F7:	*a_pNonSystemKeyText = "F7";	break;
		case Qt::Key_F8:	*a_pNonSystemKeyText = "F8";	break;
		case Qt::Key_F9:	*a_pNonSystemKeyText = "F9";	break;
		case Qt::Key_F10:	*a_pNonSystemKeyText = "F10";	break;
		case Qt::Key_F11:	*a_pNonSystemKeyText = "F11";	break;
		case Qt::Key_F12:	*a_pNonSystemKeyText = "F12";	break;

		case Qt::Key_0:	*a_pNonSystemKeyText = "0";	break;
		case Qt::Key_1:	*a_pNonSystemKeyText = "1";	break;
		case Qt::Key_2:	*a_pNonSystemKeyText = "2";	break;
		case Qt::Key_3:	*a_pNonSystemKeyText = "3";	break;
		case Qt::Key_4:	*a_pNonSystemKeyText = "4";	break;
		case Qt::Key_5:	*a_pNonSystemKeyText = "5";	break;
		case Qt::Key_6:	*a_pNonSystemKeyText = "6";	break;
		case Qt::Key_7:	*a_pNonSystemKeyText = "7";	break;
		case Qt::Key_8:	*a_pNonSystemKeyText = "8";	break;
		case Qt::Key_9:	*a_pNonSystemKeyText = "9";	break;

		case Qt::Key_A:	*a_pNonSystemKeyText = "A";	break;
		case Qt::Key_B:	*a_pNonSystemKeyText = "B";	break;
		case Qt::Key_C:	*a_pNonSystemKeyText = "C";	break;
		case Qt::Key_D:	*a_pNonSystemKeyText = "D";	break;
		case Qt::Key_E:	*a_pNonSystemKeyText = "E";	break;
		case Qt::Key_F:	*a_pNonSystemKeyText = "F";	break;
		case Qt::Key_G:	*a_pNonSystemKeyText = "G";	break;
		case Qt::Key_H:	*a_pNonSystemKeyText = "H";	break;
		case Qt::Key_I:	*a_pNonSystemKeyText = "I";	break;
		case Qt::Key_J:	*a_pNonSystemKeyText = "J";	break;
		case Qt::Key_K:	*a_pNonSystemKeyText = "K";	break;
		case Qt::Key_L:	*a_pNonSystemKeyText = "L";	break;
		case Qt::Key_M:	*a_pNonSystemKeyText = "M";	break;
		case Qt::Key_N:	*a_pNonSystemKeyText = "N";	break;
		case Qt::Key_O:	*a_pNonSystemKeyText = "O";	break;
		case Qt::Key_P:	*a_pNonSystemKeyText = "P";	break;
		case Qt::Key_Q:	*a_pNonSystemKeyText = "Q";	break;
		case Qt::Key_R:	*a_pNonSystemKeyText = "R";	break;
		case Qt::Key_S:	*a_pNonSystemKeyText = "S";	break;
		case Qt::Key_T:	*a_pNonSystemKeyText = "T";	break;
		case Qt::Key_U:	*a_pNonSystemKeyText = "U";	break;
		case Qt::Key_V:	*a_pNonSystemKeyText = "V";	break;
		case Qt::Key_W:	*a_pNonSystemKeyText = "W";	break;
		case Qt::Key_X:	*a_pNonSystemKeyText = "X";	break;
		case Qt::Key_Y:	*a_pNonSystemKeyText = "Y";	break;
		case Qt::Key_Z:	*a_pNonSystemKeyText = "Z";	break;
	}
}

void mkUtil::TranslateKeyTextToEnum( IN QString a_strSystemKeyText, IN QString a_strNonSystemKeyText,
                                    					      OUT int *a_nSystemKey, OUT int *a_nNonSystemKey )

{
	if ( a_strSystemKeyText == "Shift" )	*a_nSystemKey = Qt::Key_Shift;
	else if ( a_strSystemKeyText == "Ctrl" )	*a_nSystemKey = Qt::Key_Control;
	else if ( a_strSystemKeyText == "Alt" )	*a_nSystemKey = Qt::Key_Alt;
	else if ( a_strSystemKeyText == "Win" )	*a_nSystemKey = Qt::Key_Meta;

	if ( a_strNonSystemKeyText == "F1" )		*a_nNonSystemKey = Qt::Key_F1;
	else if ( a_strNonSystemKeyText == "F2" )	*a_nNonSystemKey = Qt::Key_F2;
	else if ( a_strNonSystemKeyText == "F3" )	*a_nNonSystemKey = Qt::Key_F3;
	else if ( a_strNonSystemKeyText == "F4" )	*a_nNonSystemKey = Qt::Key_F4;
	else if ( a_strNonSystemKeyText == "F5" )	*a_nNonSystemKey = Qt::Key_F5;
	else if ( a_strNonSystemKeyText == "F6" )	*a_nNonSystemKey = Qt::Key_F6;
	else if ( a_strNonSystemKeyText == "F7" )	*a_nNonSystemKey = Qt::Key_F7;
	else if ( a_strNonSystemKeyText == "F8" )	*a_nNonSystemKey = Qt::Key_F8;
	else if ( a_strNonSystemKeyText == "F9" )	*a_nNonSystemKey = Qt::Key_F9;
	else if ( a_strNonSystemKeyText == "F10" )	*a_nNonSystemKey = Qt::Key_F10;
	else if ( a_strNonSystemKeyText == "F11" )	*a_nNonSystemKey = Qt::Key_F11;
	else if ( a_strNonSystemKeyText == "F12" )	*a_nNonSystemKey = Qt::Key_F12;

	else if ( a_strNonSystemKeyText == "0" )	*a_nNonSystemKey = Qt::Key_0;
	else if ( a_strNonSystemKeyText == "1" )	*a_nNonSystemKey = Qt::Key_1;
	else if ( a_strNonSystemKeyText == "2" )	*a_nNonSystemKey = Qt::Key_2;
	else if ( a_strNonSystemKeyText == "3" )	*a_nNonSystemKey = Qt::Key_3;
	else if ( a_strNonSystemKeyText == "4" )	*a_nNonSystemKey = Qt::Key_4;
	else if ( a_strNonSystemKeyText == "5" )	*a_nNonSystemKey = Qt::Key_5;
	else if ( a_strNonSystemKeyText == "6" )	*a_nNonSystemKey = Qt::Key_6;
	else if ( a_strNonSystemKeyText == "7" )	*a_nNonSystemKey = Qt::Key_7;
	else if ( a_strNonSystemKeyText == "8" )	*a_nNonSystemKey = Qt::Key_8;
	else if ( a_strNonSystemKeyText == "9" )	*a_nNonSystemKey = Qt::Key_9;

	else if ( a_strNonSystemKeyText == "A" )	*a_nNonSystemKey = Qt::Key_A;
	else if ( a_strNonSystemKeyText == "B" )	*a_nNonSystemKey = Qt::Key_B;
	else if ( a_strNonSystemKeyText == "C" )	*a_nNonSystemKey = Qt::Key_C;
	else if ( a_strNonSystemKeyText == "D" )	*a_nNonSystemKey = Qt::Key_D;
	else if ( a_strNonSystemKeyText == "E" )	*a_nNonSystemKey = Qt::Key_E;
	else if ( a_strNonSystemKeyText == "F" )	*a_nNonSystemKey = Qt::Key_F;
	else if ( a_strNonSystemKeyText == "G" )	*a_nNonSystemKey = Qt::Key_G;
	else if ( a_strNonSystemKeyText == "H" )	*a_nNonSystemKey = Qt::Key_H;
	else if ( a_strNonSystemKeyText == "I" )	*a_nNonSystemKey = Qt::Key_I;
	else if ( a_strNonSystemKeyText == "J" )	*a_nNonSystemKey = Qt::Key_J;
	else if ( a_strNonSystemKeyText == "K" )	*a_nNonSystemKey = Qt::Key_K;
	else if ( a_strNonSystemKeyText == "L" )	*a_nNonSystemKey = Qt::Key_L;
	else if ( a_strNonSystemKeyText == "M" )	*a_nNonSystemKey = Qt::Key_M;
	else if ( a_strNonSystemKeyText == "N" )	*a_nNonSystemKey = Qt::Key_N;
	else if ( a_strNonSystemKeyText == "O" )	*a_nNonSystemKey = Qt::Key_O;
	else if ( a_strNonSystemKeyText == "P" )	*a_nNonSystemKey = Qt::Key_P;
	else if ( a_strNonSystemKeyText == "Q" )	*a_nNonSystemKey = Qt::Key_Q;
	else if ( a_strNonSystemKeyText == "R" )	*a_nNonSystemKey = Qt::Key_R;
	else if ( a_strNonSystemKeyText == "S" )	*a_nNonSystemKey = Qt::Key_S;
	else if ( a_strNonSystemKeyText == "T" )	*a_nNonSystemKey = Qt::Key_T;
	else if ( a_strNonSystemKeyText == "U" )	*a_nNonSystemKey = Qt::Key_U;
	else if ( a_strNonSystemKeyText == "V" )	*a_nNonSystemKey = Qt::Key_V;
	else if ( a_strNonSystemKeyText == "W" )	*a_nNonSystemKey = Qt::Key_W;
	else if ( a_strNonSystemKeyText == "X" )	*a_nNonSystemKey = Qt::Key_X;
	else if ( a_strNonSystemKeyText == "Y" )	*a_nNonSystemKey = Qt::Key_Y;
	else if ( a_strNonSystemKeyText == "Z" )	*a_nNonSystemKey = Qt::Key_Z;
}
